'use strict';

let nunjucks = require('nunjucks');

// 四
function createEnv(path, opts) {
    //path 就是指定存放模板的目录，如果没有指定的话就使用views
    path = path || 'views',
        //opts 为可选功能的开启或关闭，默认是一个空对象
        opts = opts || {};
    //设置环境配置选项
    let envOptions = {
        //自动转义（默认是true）
        autoescape: opts.autoescape === undefined ? true : opts.autoescape,
        //抛出异常，当输出null或者undefined会抛出异常（默认是false）
        throwOnUndefined: opts.throwOnUndefined === undefined ? false : opts.throwOnUnderfined,
        //当模板改变时，是否重新加载（默认是false）开发模式下一般使用true，生产模式下一般用false
        watch: opts.watch === undefined ? false : opts.watch,
        //没有缓存，是否需要重新加载缓存（默认是false）开发模式下一般使用true，生产模式下一般用false
        noCache: opts.noCache === undefined ? false: opts.noCache
    }
    //配置
    let env = nunjucks.configure(path, envOptions)
    //返回env
    return env;
}
//将此模板作为中间件暴露出去，注意中间件必须是一个函数
module.exports = async (ctx, next) => {
    //为ctx绑定render方法，方法里有两个参数，view为视图，也就是需要渲染的模板，model为模型也就是需要的数据
    ctx.render = function (view, model) {
        //调用createEnv函数
        let env = createEnv('views', { autoescape: false });
        //渲染网页
        ctx.body = env.render(view, model);
    }
    //调用下一个异步函数   这一个很重要
    await next();
}



